package reflection;

/**
 * Class类
 */
public class Class01 {

    public static void main(String[] args) throws Exception {

        /*
            1)Class也是类，因此也继承Object类
            2)Class类对象不是 new 出来的，而是在系统中创建的
            3)对于某个类的Class类对象，在内存中只有一份，因为类只加载一次
            4)每个类的实例都会急得自己是由哪个Class实例所生成
            5)通过Class可以完整地得到一个类的完整结构，通过一系列API
            6)Class对象是存放在堆的
            7)类的字节码二进制数据，是放在方法区的，有的地方称为类的元数据(方法、变量名、访问权限等)
         */

        //Class 类对象不是new 出来的，而是系统创建的
        //传统方法
        /* ClassLoader 类
            public Class<?> loadClass(String name) throws ClassNotFoundException {
                return loadClass(name, false);
            }
        */
        Cat cat = new Cat();

        //反射方式
        /*
            ClassLoader类,仍然是通过ClassLoader类加载Cat类的Class对象
            publicClass<?> loadClass(String name) throws ClassNotFoundException{
                return loadClass(name,false);
            }
        */
        Class cls = Class.forName("reflection.Cat");

        //3.对于某个类的Class类对象，在内存中只有一份，因为类只加载一次
        Class cls2 = Class.forName("reflection.Cat");
        System.out.println(cls.hashCode());
        System.out.println(cls2.hashCode());//同上
        Class cls3=Class.forName("reflection.Dog");
        System.out.println(cls3.hashCode());
    }
}
